package com.chj.leetcode.tijie100to150;

public class Code65_ValidNumber {
	public static boolean isNumber(String s) {
		char[] sc = s.toCharArray();
		int l = 0, r = sc.length - 1;
//		// 去掉首尾的空格
//		while (l <= r && sc[l] == ' ') {
//			l++;
//		}
//		while (l <= r && sc[r] == ' ') {
//			r--;
//		}
//		if (l > r) {
//			return false;
//		}
//		int len = r - l + 1;
//		char[] ac = new char[len];
////		s = s.substr(l, r - l + 1);
//		int j = 0;
//		for (int i = l; i < len + l; i++) {
//			ac[j++] = sc[i];
//		}
		// 去掉符号位
//		if (ac[0] == '+' || ac[0] == '-') {
//			s = s.substr(1);
//		}
//		if (s.empty()) {// 如果只有符号位或空格，就是false
//			return false;
//		}

		char[] ac = trim(sc, l, r);
		int acLen = ac.length;
		if (acLen == 0) {
			return false;
		}
		if (ac[0] == '+' || ac[0] == '-') {
			ac = trim(sc, 1, acLen - 1);
		}

		int accLen = ac.length;
		if (accLen == 0) {
			return false;
		}

		// 如果只有“.”或“.e”或“.E”，就是false
		if (ac[0] == '.' && accLen == 1) {
			return false;
		}

		if (ac[0] == '.' && (ac[1] == 'e' || ac[1] == 'E')) {
			return false;
		}
		// 遍历剩下的字符串
		// dot记录.的个数，e记录e/E的个数
		int dot = 0, e = 0;
		for (int i = 0; i < accLen; i++) {
			if (ac[i] == '.') {
				if (dot > 0 || e > 0) { // 如果当前是.，且之前出现了.或e的话，就是false
					return false;
				}

				dot++;
			} else if (ac[i] == 'e' || ac[i] == 'E') {
				if (i == 0 || i + 1 == ac.length || e > 0) { // 如果当前是e，且它前面为空或后面为空或者之前出现过e，就是false
					return false;
				}

				if (ac[i + 1] == '+' || ac[i + 1] == '-') {
					if (i + 2 == ac.length) { // 如果当前是e，下一位是+或-，没有下下一位了，就是false
						return false;
					}
					i++;// 跳过符号位
				}

				e++;
			} else if (ac[i] < '0' || ac[i] > '9') {
//				if (i == 0) {
//					if (ac[0] == '+' || ac[0] == '-') {
//						continue;
//					}
//				}

				return false;
			}
		}

		return true;
	}

	public static char[] trim(char[] sc, int left, int right) {
		// 去掉首尾的空格
		while (left <= right && sc[left] == ' ') {
			left++;
		}
		while (left <= right && sc[right] == ' ') {
			right--;
		}
		if (left > right) {
			return new char[0];
		}

		int len = right - left + 1;
		char[] ac = new char[len];
		int j = 0;
		for (int i = left; i < len + left; i++) {
			ac[j++] = sc[i];
		}
		return ac;
	}

	public static void main(String[] args) {
		String string = "+ 1";
		System.err.println(isNumber(string));
	}
}
